#include"Thread.hpp"
#include<vector>
#include<unistd.h>

#define NUM 5

using namespace zzx;

void route(int num)
{
    while(num)
    {
        cout << "I am newthread, num: " << num << endl;
        num--;
        sleep(1);
    }
}

int main()
{
    vector<thread<int>> threads;
    //创建一批线程
    for(int i = 1; i <= NUM; i++)
    {    
        //堆空间,防止线程共享同一块内存区域,造成数据竞争和不一致问题
        char* buffer = new char[64];
        snprintf(buffer, 128, "thread-%d", i);
        threads.emplace_back(route, 5, buffer);
    }
    //启动一批线程
    for(auto& e : threads)
        e.start();
    //等待一批线程
    for(auto& e : threads)
    {
        e.join();
        cout << "wait thread done, thread is " << e.name() << endl;
        sleep(1);
    }

    return 0;
}



// #include<iostream>
// /*<thread>库的实现依赖于底层的线程库,
// 在编译和链接的时候通常需要加上-pthread选项,告诉编译器你需要链接pthread库*/
// #include<thread> //定义了与多线程编程相关的类和函数
// #include<unistd.h>

// using namespace std;

// // 线程函数
// void threadFunction(int num) 
// {
//     while(true)
//     {
//         cout << "I am newthread " << num << endl;
//         sleep(1);
//     }
// }
 
// int main() {
//     const int num = 5;
    
//     //thread类,创建和管理线程
//     thread t(threadFunction, num);

//     while(true)
//     {
//         cout << "I am mainthread" << endl;
//         sleep(1);
//     }

//     //thread类提供了join、detach成员函数来管理线程的声明周期
//     t.join(); 
    
//     return 0;
// }